﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using Project_KhuyenMaiVang.Models;
using Project_KhuyenMaiVang.DataProvider;
using System.Data;
using System.Data.SqlClient;

namespace Project_KhuyenMaiVang.DAO
{
    public class TinKhuyenMaiDAO : MyDataProvider
    {
        // Lấy danh sách tin khuyến mãi tại thời điểm date, ở khu vực area
        // return danh sách tin khuyến mãi
        public List<TinKhuyenMaiDTO> getSaleOffNews(DateTime date, KhuVucDTO area)
        {
            try
            {
                List<TinKhuyenMaiDTO> result = new List<TinKhuyenMaiDTO>();
                string query = "select * from TinKhuyenMai where TinhTrang = 'True' and exists(select * from Diachi where TinKhuyenMai.IDAccount = DiaChi.IDAccount and Diachi.MaKhuVuc = '" + area.MaKhuVuc.ToString() + "') and datediff(d, NgayBatDau, " + date.ToShortDateString() + ") <= datediff(d, NgayBatDau, NgayKetThuc)";
                _Adapter = new SqlDataAdapter(query, _Connection);
                DataSet dataset = new DataSet();
                _Adapter.Fill(dataset);
                DataTable dt = dataset.Tables[0];


                for (int i = 0; i < dt.Rows.Count; i++)
                {
                    object ob = GetDataFromDataRow(dt, i);
                    result.Add((TinKhuyenMaiDTO)ob);
                }
                return result;
            }
            catch (System.Exception ex)
            {
                return null;
            }
        }

        // Lấy thông tin chi tiết về tin khuyến mãi có mã tin khuyến mãi là idSaleOffNews
        // return về tin khuyến mãi tìm được nếu thành công, ngược lại là null
        public TinKhuyenMaiDTO getDetailOfSaleOffNews(int idSaleOffNews)
        {
            try
            {
                string query = "select * from TinKhuyenMai where TinhTrang = 'True' and MaTinKhuyenMai = '" + idSaleOffNews.ToString() + "'";
                _Adapter = new SqlDataAdapter(query, _Connection);
                DataSet dataset = new DataSet();
                _Adapter.Fill(dataset);
                DataTable dt = dataset.Tables[0];


                return (TinKhuyenMaiDTO)GetDataFromDataRow(dt, 0);
            }
            catch (System.Exception ex)
            {
                return null;
            }
        }


        // Thêm tin khuyến mãi mới
        // parameter    : TinKhuyenMaiDTO
        // return       : true nếu thành công, false nếu thất bại
        public bool insert(TinKhuyenMaiDTO saleOffNews)
        {
            try
            {
                string queryString = "insert into TinKhuyenMai(MaSanPham, ThongTinTomTat, GiaKhuyenMai, NgayBatDau, NgayKetThuc, SoLuongKhuyenMai, SoLuongMua, DiemNoiBat, DieuKienSuDung, IDAccount, "+
                         "SoLuongToiThieu, MaHinhThucGiaoHang, MaKhuVuc, DiaChi, TinhTrang) values("
                + saleOffNews.MaSanPham.ToString() + ", "
                + "N'" + saleOffNews.ThongTinTomTat.ToString() + "', "
                + saleOffNews.GiaKhuyenMai.ToString() + ", "
                +"convert(datetime,'"+saleOffNews.NgayBatDau.ToShortDateString()+"',103),"
                +"convert(datetime,'" + saleOffNews.NgayKetThuc.ToShortDateString() + "',103)," 
                + saleOffNews.SoLuongKhuyenMai.ToString() + ", "
                + saleOffNews.SoLuongMua.ToString() + ", "
                + "N'" + saleOffNews.DiemNoiBat.ToString() + "', "
                + "N'" + saleOffNews.DieuKienSuDung.ToString() + "', "
                + saleOffNews.IdAccount.ToString() + ", "
                + saleOffNews.SoLuongToiThieu.ToString() + ", "
                + saleOffNews.MaHinhThucGaoHang + ", "
                + saleOffNews.MaKhuVuc + ", N'"
                + saleOffNews.DiaChi+ "','"
                + saleOffNews.TinhTrang + "')";
                this.executeNonQuery(queryString);
                return true;
            }
            catch(Exception e)
            {
                return false;
            }
        }

        // Xóa tin khuyến mãi
        // parameter    : TinKhuyenMaiDTO
        // return       : true nếu thành công, false nếu thất bại
        public bool delete(TinKhuyenMaiDTO saleOffNews)
        {
            try
            {
                string query = "update TinKhuyenMai set TinhTrang = 'False' where TinhTrang = 'True' and MaTinKhuyenMai = '" + saleOffNews.MaTinKhuyenMai.ToString() + "'";
                this.executeNonQuery(query);
                return true;
            }
            catch (System.Exception ex)
            {
                return false;
            }
            
        }
		
		// Xóa tin khuyến mãi
        // parameter    : MaTinKhuyenMai
        // return       : true nếu thành công, false nếu thất bại
        public bool delete(int MaTinKhuyenMaiInput)
        {
            try
            {
                string query = "update TinKhuyenMai set TinhTrang = 'False' where TinhTrang = 'True' and MaTinKhuyenMai = '" + MaTinKhuyenMaiInput.ToString() + "'";
                this.executeNonQuery(query);
                return true;
            }
            catch (System.Exception ex)
            {
                return false;
            }
            
        }

        // Cập nhật tin khuyến mãi mới
        // parameter    : TinKhuyenMaiDTO
        // return       : true nếu thành công, false nếu thất bại
        public bool update(TinKhuyenMaiDTO saleOffNews)
        {
            try
            {
                string queryString = "update TinKhuyenMai "
                + "set MaSanPham = " + saleOffNews.MaSanPham.ToString() + ", "
                + "ThongTinTomTat = '" + saleOffNews.ThongTinTomTat.ToString() + "', "
                + "DiaChi = '" + saleOffNews.DiaChi.ToString() + "', "
                + "GiaKhuyenMai = " + saleOffNews.GiaKhuyenMai.ToString() + ", "
                + "NgayBatDau = '" + saleOffNews.NgayBatDau.ToString() + "', "
                + "NgayKetThuc = '" + saleOffNews.NgayKetThuc.ToString() + "', "
                + "SoLuongKhuyenMai = " + saleOffNews.SoLuongKhuyenMai.ToString() + ", "
                + "SoLuongMua = " + saleOffNews.SoLuongMua.ToString() + ", "
                + "DiemNoiBat = '" + saleOffNews.DiemNoiBat.ToString() + "', "
                + "DieuKienSuDung = '" + saleOffNews.DieuKienSuDung.ToString() + "', "
                + "IDAccount = " + saleOffNews.IdAccount.ToString() + ", "
                + "SoLuongToiThieu = " + saleOffNews.SoLuongToiThieu.ToString() + " "
                + "where TinhTrang = 'True' and MaTinKhuyenMai = '" + saleOffNews.MaTinKhuyenMai.ToString() + "'";
                this.executeNonQuery(queryString);
                return true;
            }
            catch (System.Exception ex)
            {
                return false;
            }
        }

        // Lấy tất cả tin khuyến mãi được đăng bởi IdAccount
        // parameter    : IDAccount
        // return       : List<TinKhuyenMaiDTO>
        public List<TinKhuyenMaiDTO> getAllSaleOffNewWasPublishedBy(int idAccount)
        {
            try
            {
                List<TinKhuyenMaiDTO> result = new List<TinKhuyenMaiDTO>();
                string query = "select * from TinKhuyenMai where TinhTrang = 'True' and IDAccount = '" + idAccount.ToString() + "'";
                _Adapter = new SqlDataAdapter(query, _Connection);
                DataSet dataset = new DataSet();
                _Adapter.Fill(dataset);
                DataTable dt = dataset.Tables[0];


                for (int i = 0; i < dt.Rows.Count; i++)
                {
                    object ob = GetDataFromDataRow(dt, i);
                    result.Add((TinKhuyenMaiDTO)ob);
                }
                return result;
            }
            catch (System.Exception ex)
            {
                return null;
            }
        }

        // Lấy tất cả tin khuyến mãi có trong hệ thống
        // parameter    : void
        // return       : List<TinKhuyenMaiDTO>
        public List<TinKhuyenMaiDTO> getAllSaleOffNews()
        {
            try
            {
                List<TinKhuyenMaiDTO> result = new List<TinKhuyenMaiDTO>();
                string query = "select * from TinKhuyenMai where TinhTrang = 'True'";
                _Adapter = new SqlDataAdapter(query, _Connection);
                DataSet dataset = new DataSet();
                _Adapter.Fill(dataset);
                DataTable dt = dataset.Tables[0];


                for (int i = 0; i < dt.Rows.Count; i++)
                {
                    object ob = GetDataFromDataRow(dt, i);
                    result.Add((TinKhuyenMaiDTO)ob);
                }
                return result;
            }
            catch (System.Exception ex)
            {
                return null;
            }
        }

        // Lấy số lượng sản phẩm tối thiểu để có thể áp dụng tin khuyến mãi
        // parameter    : mã tin khuyến mãi
        // return       : số lượng tối thiểu
        public int getMinNumberOfProduct(int idSaleOffNews)
        {
            try
            {
                string query = "select SoLuongToiThieu from TinKhuyenMai where TinhTrang = 'True' and MaTinKhuyenMai = ' "+ idSaleOffNews.ToString() +" '";
                _Adapter = new SqlDataAdapter(query, _Connection);
                DataSet dataset = new DataSet();
                _Adapter.Fill(dataset);
                DataTable dt = dataset.Tables[0];
                return Int32.Parse(dt.Rows[0]["SoLuongToiThieu"].ToString());
            }
            catch (System.Exception ex)
            {
                return -1;
            }
        }


        protected override object GetDataFromDataRow(DataTable dt, int i)
        {
            TinKhuyenMaiDTO tinKhuyenMaiDTO = new TinKhuyenMaiDTO();
            tinKhuyenMaiDTO.MaTinKhuyenMai = Int32.Parse(dt.Rows[i]["MaTinKhuyenMai"].ToString());
            tinKhuyenMaiDTO.MaSanPham = Int32.Parse(dt.Rows[i]["MaSanPham"].ToString());
            tinKhuyenMaiDTO.ThongTinTomTat = dt.Rows[i]["ThongTinTomTat"].ToString();
            tinKhuyenMaiDTO.GiaKhuyenMai = float.Parse(dt.Rows[i]["GiaKhuyenMai"].ToString());
            tinKhuyenMaiDTO.NgayBatDau = DateTime.Parse(dt.Rows[i]["NgayBatDau"].ToString());
            tinKhuyenMaiDTO.NgayKetThuc = DateTime.Parse(dt.Rows[i]["NgayKetThuc"].ToString());
            tinKhuyenMaiDTO.SoLuongKhuyenMai = Int32.Parse(dt.Rows[i]["SoLuongKhuyenMai"].ToString());
            tinKhuyenMaiDTO.SoLuongMua = Int32.Parse(dt.Rows[i]["SoLuongMua"].ToString());
            tinKhuyenMaiDTO.DiemNoiBat = dt.Rows[i]["DiemNoiBat"].ToString();
            tinKhuyenMaiDTO.DieuKienSuDung = dt.Rows[i]["DieuKienSuDung"].ToString();
            tinKhuyenMaiDTO.IdAccount = Int32.Parse(dt.Rows[i]["IDAccount"].ToString());
            tinKhuyenMaiDTO.SoLuongToiThieu = Int32.Parse(dt.Rows[i]["SoLuongToiThieu"].ToString());
            tinKhuyenMaiDTO.DiaChi = dt.Rows[i]["DiaChi"].ToString();
            tinKhuyenMaiDTO.TinhTrang = bool.Parse(dt.Rows[i]["TinhTrang"].ToString());
            tinKhuyenMaiDTO.DiaChi = dt.Rows[i]["DiaChi"].ToString();
            tinKhuyenMaiDTO.MaKhuVuc = Int32.Parse(dt.Rows[i]["MaKhuVuc"].ToString());
            tinKhuyenMaiDTO.MaHinhThucGiaoHang = Int32.Parse(dt.Rows[i]["MaHinhThucGiaoHang"].ToString());
            return (object)tinKhuyenMaiDTO;
        }
    }
}